using System;
using System.Collections.Generic;
using ns26;
using ns27;
using Triton.Game.Mono;

namespace Triton.Game.Mapping
{
	[Attribute38("HandActorCache")]
	public class HandActorCache : MonoClass
	{
		[Attribute38("HandActorCache.ActorKey")]
		public class ActorKey : MonoClass
		{
			public TAG_CARDTYPE m_cardType => method_2<TAG_CARDTYPE>("m_cardType");

			public TAG_PREMIUM m_premiumType => method_2<TAG_PREMIUM>("m_premiumType");

			public bool m_isHeroSkin => method_2<bool>("m_isHeroSkin");

			public ActorKey(IntPtr address, string className)
				: base(address, className)
			{
			}

			public ActorKey(IntPtr address)
				: this(address, "ActorKey")
			{
			}

			public static bool op_Equality(ActorKey a, ActorKey b)
			{
				return MonoClass.smethod_14<bool>(TritonHs.MainAssemblyPath, "", "ActorKey", "op_Equality", new object[2] { a, b });
			}

			public static bool op_Inequality(ActorKey a, ActorKey b)
			{
				return MonoClass.smethod_14<bool>(TritonHs.MainAssemblyPath, "", "ActorKey", "op_Inequality", new object[2] { a, b });
			}

			public new bool Equals(object obj)
			{
				return method_10<bool>("Equals", new Class276.Enum20[1] { Class276.Enum20.Class }, new object[1] { obj });
			}

			public bool Equals(ActorKey other)
			{
				return method_10<bool>("Equals", new Class276.Enum20[1] { Class276.Enum20.Class }, new object[1] { other });
			}

			public new int GetHashCode()
			{
				return method_11<int>("GetHashCode", Array.Empty<object>());
			}
		}

		public List<TAG_CARDTYPE> ACTOR_CARD_TYPES => method_3<Class250<TAG_CARDTYPE>>("ACTOR_CARD_TYPES")?.method_25();

		public HandActorCache(IntPtr address, string className)
			: base(address, className)
		{
		}

		public HandActorCache(IntPtr address)
			: this(address, "HandActorCache")
		{
		}

		public void Initialize()
		{
			method_8("Initialize");
		}

		public bool IsInitializing()
		{
			return method_11<bool>("IsInitializing", Array.Empty<object>());
		}

		public Actor GetActor(EntityDef entityDef, TAG_PREMIUM premium)
		{
			return method_14<Actor>("GetActor", new object[2] { entityDef, premium });
		}

		public ActorKey MakeActorKey(EntityDef entityDef, TAG_PREMIUM premium, bool isHeroSkin)
		{
			return method_15<ActorKey>("MakeActorKey", new Class276.Enum20[3]
			{
				Class276.Enum20.Class,
				Class276.Enum20.ValueType,
				Class276.Enum20.Boolean
			}, new object[3] { entityDef, premium, isHeroSkin });
		}

		public ActorKey MakeActorKey(TAG_CARDTYPE cardType, TAG_PREMIUM premiumType, bool isHeroSkin)
		{
			return method_15<ActorKey>("MakeActorKey", new Class276.Enum20[3]
			{
				Class276.Enum20.ValueType,
				Class276.Enum20.ValueType,
				Class276.Enum20.Boolean
			}, new object[3] { cardType, premiumType, isHeroSkin });
		}

		public void OnActorLoaded(AssetReference assetRef, GameObject go, object callbackData)
		{
			method_8("OnActorLoaded", assetRef, go, callbackData);
		}

		public void FireActorLoadedListeners(string assetRef, Actor actor)
		{
			method_8("FireActorLoadedListeners", assetRef, actor);
		}
	}
}
